package ErgebnisFilterung;

import java.util.Calendar;
import java.util.Date;

public class Spiel {

	private String datum, zeit, ort, heim, gast, ergebnis;
	private boolean live;
	private String torschützenHeim, torschützenGast;
	public Date datumFormatiert;
	private String tag_fuer_anzeige;
	private String datum_fuer_anzeige;

	public Spiel(String datum, String zeit, String ort, String heim,
			String gast, String ergebnis, boolean live, String torschützenHeim,
			String torschützenGast) {
		this.datum = datum;
		this.zeit = zeit;
		this.ort = ort;
		this.heim = heim;
		this.gast = gast;
		this.ergebnis = ergebnis;
		this.live = live;
		this.torschützenHeim = torschützenHeim;
		this.torschützenGast = torschützenGast;
		this.datumFormatiert = filtereDatum(datum, zeit);
		this.tag_fuer_anzeige = getTagfromAbkuerzung(datum.substring(0, 2));
	}

	public void fuelleAnzeigeParameter() {
		this.datumFormatiert = filtereDatum(datum, zeit);
		if (!datum.contains("k. Zeitangabe")) {
			this.tag_fuer_anzeige = getTagfromAbkuerzung(datum.substring(0, 2));
			this.datum_fuer_anzeige = datum.substring(datum.indexOf(",") + 2);
		} else {
			this.tag_fuer_anzeige = "Keine Zeitangaben";
			this.datum_fuer_anzeige = "-";
		}
	}

	public Spiel() {
	}

	public Date filtereDatum(String datum, String zeit) {
		if (datum.contains("k. Zeitangabe")) {
			return new Date(0);
		} else {
			String dat;
			if (Character.isLetter(datum.charAt(0)))
				dat = datum.substring(datum.indexOf(",") + 2);
			else
				dat = datum;

			Calendar c = Calendar.getInstance();
			c.set(Integer.parseInt(dat.substring(dat.length() - 4)),
					Integer.parseInt(dat.substring(3, 5)) - 1,
					Integer.parseInt(dat.substring(0, 2)),
					Integer.parseInt(zeit.substring(0, 2)),
					Integer.parseInt(zeit.substring(3, 5)), 0);
			Date date = c.getTime();
			return date;
		}
	}

	public void setDatum(String datum) {
		this.datum = datum;
	}

	public void setZeit(String zeit) {
		this.zeit = zeit;
	}

	public void setOrt(String ort) {
		this.ort = ort;
	}

	public void setHeim(String heim) {
		this.heim = heim;
	}

	public void setGast(String gast) {
		this.gast = gast;
	}

	public void setErgebnis(String ergebnis) {
		this.ergebnis = ergebnis;
	}

	String getTagfromAbkuerzung(String abkuerzung) {
		if (abkuerzung.equals("Mo"))
			return "Montag";
		if (abkuerzung.equals("Di"))
			return "Dienstag";
		if (abkuerzung.equals("Mi"))
			return "Mittwoch";
		if (abkuerzung.equals("Do"))
			return "Donnerstag";
		if (abkuerzung.equals("Fr"))
			return "Freitag";
		if (abkuerzung.equals("Sa"))
			return "Samstag";
		if (abkuerzung.equals("So"))
			return "Sonntag";
		return "";
	}

	public String getDatum() {
		return datum;
	}

	public String getZeit() {
		return zeit;
	}

	public String getOrt() {
		return ort;
	}

	public String getHeim() {
		return heim;
	}

	public String getGast() {
		return gast;
	}

	public String getErgebnis() {
		return ergebnis;
	}

	public Date getDatumFormatiert() {
		return datumFormatiert;
	}

	public String getTag_fuer_anzeige() {
		return tag_fuer_anzeige;
	}

	public String getDatum_fuer_anzeige() {
		return datum_fuer_anzeige;
	}

	public boolean isLive() {
		return live;
	}

	@Override
	public String toString() {
		return "Spiel [datum=" + datum + ", zeit=" + zeit + ", ort=" + ort
				+ ", heim=" + heim + ", gast=" + gast + ", ergebnis="
				+ ergebnis + ", datum_fuer_anzeige=" + datumFormatiert
				+ ", tag_fuer_anzeige=" + tag_fuer_anzeige + "]";
	}

	public void setLive(boolean live) {
		this.live = live;
	}

	public void setTorschützenHeim(String torschützenHeim) {
		this.torschützenHeim = torschützenHeim;
	}

	public void setTorschützenGast(String torschützenGast) {
		this.torschützenGast = torschützenGast;
	}

	public String getTorschützenHeim() {
		return torschützenHeim;
	}

	public String getTorschützenGast() {
		return torschützenGast;
	}

	/**
	 * Liefert zurück, ob das Spiel aktuell noch bevorsteht oder bereits
	 * vergangen ist.
	 * 
	 * @return {@code true}, falls noch bevorstehend; {@code false} sonst.
	 */
	public boolean spielBevorstehend() {
		if (datumFormatiert == null || datumFormatiert.equals(new Date(0)))
			return true;
		if (datumFormatiert.after(new Date(System.currentTimeMillis())))
			// Datum bevorstehend
			return true;

		// Sonst
		return false;
	}

}
